import * as vsc from '../接口封装';
import { 语言基类 } from './基类';

const 不需要矫正锚点: string[] = [];

/**
 * 通用默认语言配置
 * 可多触发，也不漏掉补全机会。
 */
export class 通用语言实现 extends 语言基类 {

    public 需要矫正锚点(文档: vsc.TextDocument): boolean {
        if (不需要矫正锚点.includes(文档.languageId)) {
            return false;
        } else {
            return true;
        }
    }

    constructor() {
        super();
        this.触发字符 = ['.', ':', ',', '(', '[', '{', '=', '<', '"', "'", '/', '@', '>', '!', '+', '-', '*', '%', ' '];
        this.补全锚点配置 = {

            是否标识符字符: (字符) => /[a-zA-Z0-9_$]/.test(字符),

            语法边界字符: new Set([
                '.',    // 成员访问
                ',',    // 分隔符
                ':',    // 类型注解、键值、路径
                '(',    // 函数调用、元组、参数列表开始
                '[',    // 索引、数组、切片开始
                '{',    // 对象、结构体、块开始
                '<',    // 泛型、模板、标签开始
                '=',    // 赋值、默认值、关键字参数
                '>',    // 比较运算
                '!',    // 逻辑非、不等于
                '+',    // 加法
                '-',    // 减法、负号
                '*',    // 乘法、通配符
                '/',    // 除法、自闭合标签
                '%',    // 取模
                '@',    // 注解、装饰器
                '"',    // 双引号字符串
                "'",    // 单引号字符串
                '`',    // 模板字符串（反引号）
                ' ',    // 空格（用于标签、SQL 等分隔）
            ]),

            最大回退距离: 40,
        };
    }
};

export default new 通用语言实现();
